package s10338;

import java.util.List;

/**
 *
 * @author Radosław Wichrowski s10338
 */
public class Neuron {

    private final List<Double> listaWejsc;
    private List<Double> listaWag;
    private int liczbaWejsc = 0;
    private double wyjscie;
    private double blad;
    public final double BIAS = 1.0;

    public Neuron(List<Double> listaWejsc, List<Double> listaWag) {
        this.liczbaWejsc = listaWejsc.size();
        this.listaWejsc = listaWejsc;
        this.listaWag = listaWag;
    }

    public Neuron(List<Double> listaWejsc, List<Double> listaWag, boolean b) {
        this.liczbaWejsc = listaWejsc.size() + 1;
        this.listaWejsc = listaWejsc;
        listaWejsc.add(BIAS);
        this.listaWag = listaWag;
        listaWag.add(Math.random() * 2 - 1);
    }

    public double getWyjscie() {
        wyjscie = 0;
        for (int i = 0; i < listaWejsc.size(); i++) {
            wyjscie += listaWejsc.get(i) * listaWag.get(i);
        }
        return sigmoid(wyjscie);

    }

    private double sigmoid(double x) {
        return 1.0 / (1.0 + (Math.exp(-x*NumeryIndeksow.BETA)));
    }

    public double getBlad() {
        return blad;
    }

    public void setBlad(double blad) {
        this.blad = blad;
    }

    public List<Double> getListaWag() {
        return listaWag;
    }

    public void setListaWag(List<Double> listaWag) {
        this.listaWag = listaWag;
    }

    public int getLiczbaWejsc() {
        return liczbaWejsc;
    }

    public void korektaWag() {
        for (int i = 0; i < liczbaWejsc; i++) {
            Double waga = listaWag.get(i);
            waga = (NumeryIndeksow.ETA * blad * listaWejsc.get(i)) + waga;
            listaWag.set(i, waga);
        }
    }

    public void wyswietlWagi() {
        for (int i = 0; i < liczbaWejsc; i++) {
            System.out.println(listaWag.get(i));
        }
    }

}
